#pragma once
#include <iostream>
#include <sstream>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

class Utility
{
public:
    static bool ReadFile(const std::string &path, std::string *fileContent)
    {
        // 读取某条路径下的资源
        // 坑：网页文件，一般是文本文件
        // 但是如果是图片、视频是二进制文件-->不能按照字符串的形式进行读取，所以我们采用二进制方式进行读取，防止文件的内容丢失

        // 1.获取文件的本身大小
        // int stat(const char *path, struct stat *buf);
        struct stat buf;
        int s = stat(path.c_str(), &buf);
        if (s < 0)
            return false;
        // 2.调整string的空间大小-->保证'\0'也能存储进来
        fileContent->resize(buf.st_size);
        // 3.读取
        int fd = open(path.c_str(),O_RDONLY);
        if(fd < 0) return false;
        read(fd,(char*)fileContent->c_str(),fileContent->size());
        logMessage(Info,"path:%s,read done..",path.c_str());
        close(fd);
    }
    static std::string ReadLine(std::string& requst,const std::string& sep)
    {
          size_t pos = requst.find(sep);
          if(pos == std::string::npos) return "";
          std::string line = requst.substr(0,pos);
          requst.erase(0,pos+sep.size());  //方便后续存储请求的报头
          return line;
    }
    static bool ReadOneLine(std::string line,std::string* method_,std::string* url_,std::string* httpversion_)
    {
        std::cout<<"line:"<<line<<std::endl;
        std::stringstream ss(line);
        ss>>*method_>>*url_>>*httpversion_;
        return true;
    }
};